package com.mingtu.dzpatrol.utils;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * @ClassName :
 * @Author : wkk
 * @Date : 2023-11-23 15:49:23
 * @Email : 1281573890@qq.com
 * @Eescription :
 */

public class ConvertLatlng {

    private static ConvertLatlng instance;

    // 单例模式中获取唯一的ExitApplication实例
    public static synchronized ConvertLatlng getInstance() {
        if (null == instance) {
            instance = new ConvertLatlng();
        }
        return instance;
    }

    /**
     * 经纬度度分秒转换为小数
     *
     * @param du
     * @param fen
     * @param miao
     * @return
     */
    public double convertToDecimal(double du, double fen, double miao) {

        if (du < 0)

            return -(Math.abs(du) + (Math.abs(fen) + (Math.abs(miao) / 60)) / 60);

        return Math.abs(du) + (Math.abs(fen) + (Math.abs(miao) / 60)) / 60;

    }


    /**
     * 以字符串形式输入经纬度的转换
     *
     * @param latlng
     * @return
     */
    public double convertToDecimalByString(String latlng) {

        double du = Double.parseDouble(latlng.substring(0, latlng.indexOf("°")));

        double fen = Double.parseDouble(latlng.substring(latlng.indexOf("°") + 1, latlng.indexOf("′")));

        double miao = Double.parseDouble(latlng.substring(latlng.indexOf("′") + 1, latlng.indexOf("″")));

        if (du < 0)

            return -(Math.abs(du) + (fen + (miao / 60)) / 60);

        return du + (fen + (miao / 60)) / 60;

    }


    /**
     * 将小数转换为度分秒
     *
     * @param num
     * @return
     */
    public String convertToSexagesimal(double num) {

        int du = (int) Math.floor(Math.abs(num)); //获取整数部分

        double temp = getdPoint(Math.abs(num)) * 60;

        int fen = (int) Math.floor(temp); //获取整数部分

        double miao = getdPoint(temp) * 60;

        DecimalFormat df = new DecimalFormat("#.00");

        if (num < 0)

            return "-" + du + "°" + fen + "'" + df.format(miao) + "\"";

        return du + "°" + fen + "'" + df.format(miao) + "\"";

    }

    /**
     * 获取小数部分
     */

    public double getdPoint(double num) {

        double d = num;

        int fInt = (int) d;

        BigDecimal b1 = new BigDecimal(Double.toString(d));

        BigDecimal b2 = new BigDecimal(Integer.toString(fInt));

        double dPoint = b1.subtract(b2).floatValue();

        return dPoint;

    }
}


